package cn.yu.od;

import java.util.*;
import java.util.stream.Collectors;

/**
 * 整理扑克
 *
 * 给定一组数字，表示扑克牌的牌面数字，忽略扑克牌的花色，请按如下规则对这一组扑克牌进行整理：
 * **步骤1.** 对扑克牌进行分组，形成组合牌，规则如下：
 * -   当牌面数字相同张数大于等于4时，组合牌为“炸弹”；
 * -   3张相同牌面数字 + 2张相同牌面数字，且3张牌与2张牌不相同时，组合牌为“葫芦”；
 * -   3张相同牌面数字，组合牌为“三张”；
 * -   2张相同牌面数字，组合牌为“对子”；
 * 对上述组合牌进行由大到小排列;规则如下:
 * 不同类型组合牌之间由大到小排列规则
 * “炸弹”> “葫芦” > “三张” > “对子” > “单张”
 * 相同类型组合牌之间 除“葫芦”外按组合牌全部牌面数字加总由大到小排列
 * “葫芦”则先按3张相同牌面数字加总由大到小排列&#xff0c;3张相同牌面数字加总相同时&#xff0c;
 * 再按另外2张牌面数字加总由大到小排列&#xff1b;</li><li>由于“葫芦”>
 *     “三张”&#xff0c;因此如果能形成更大的组合牌&#xff0c;也可以将“三张”拆分为2张和1张&#xff0c;
 *     其中的2张可以和其它“三张”重新组合成“葫芦”&#xff0c;剩下的1张为“单张”
 *
 *
 * https://blog.csdn.net/banxia_frontend/article/details/124894767
 *
 * case1
 * 4 4 4 3 3 3 7 7 2 2
 * 4 4 4 7 7 3 3 3 2 2
 *
 * case2
 * 1 3 3 2 1 5
 * 3 3 1 1 5 2
 *
 * case3
 * 4 4 2 1 2 1 3 3 3 4
 * 4 4 4 3 3 2 2 1 1 3
 *
 * @Author : Ning Yu
 * @create 2023/4/1 14:10
 */
public class ZhengLiPuKe {

    public static void main(String[] args) {


        Scanner scanner = new Scanner(System.in);
        String input = scanner.nextLine();
        String[] ss = input.split(" ");
        HashMap<Integer, Integer> cardMap = new HashMap<>();
        for (int i = 0; i < ss.length; i++) {
            int card = Integer.parseInt(ss[i]);
            cardMap.put(card, cardMap.getOrDefault(card, 0) + 1);
        }
        HashMap<String, List<Integer>> comb = new HashMap<>();
        comb.put("4", new ArrayList<>());
        comb.put("3", new ArrayList<>());
        comb.put("2", new ArrayList<>());
        comb.put("1", new ArrayList<>());
        cardMap.forEach((card, num)->{
            if(4 == num){
                comb.get("4").add(card);
            }if(3 == num){
                comb.get("3").add(card);
            }if(2 == num){
                comb.get("2").add(card);
            }if(1 == num){
                comb.get("1").add(card);
            }
        });
        ArrayList<Integer> sortList = new ArrayList<>();
        //排序
        Collections.sort(comb.get("4"), Collections.reverseOrder());
        Collections.sort(comb.get("3"), Collections.reverseOrder());
        Collections.sort(comb.get("2"), Collections.reverseOrder());
        Collections.sort(comb.get("1"), Collections.reverseOrder());
        //将4张按顺序加入
        while (!comb.get("4").isEmpty()){
            for (int i = 0; i < 4; i++) {
                sortList.add(comb.get("4").remove(0));
            }
        }
        //葫芦
        while (!comb.get("3").isEmpty() && (comb.get("3").size() > 1 || !comb.get("2").isEmpty())){
            Integer c3 = comb.get("3").remove(0);
            for (int i = 0; i < 3; i++) {
                sortList.add(c3);
            }

            if(comb.get("3").isEmpty()){
                Integer c2 = comb.get("2").remove(0);
                for (int i = 0; i < 2; i++) {
                    sortList.add(c2);
                }
            } else if (comb.get("2").isEmpty()) {
                Integer cc = comb.get("3").remove(0);
                for (int i = 0; i < 2; i++) {
                    sortList.add(cc);
                }
                comb.get("1").add(cc);
            }else {
                if(comb.get("2").get(0) >= comb.get("3").get(0)){
                    Integer c2 = comb.get("2").remove(0);
                    for (int i = 0; i < 2; i++) {
                        sortList.add(c2);
                    }
                }else {
                    Integer cc = comb.get("3").remove(0);
                    for (int i = 0; i < 2; i++) {
                        sortList.add(cc);
                    }
                    comb.get("1").add(cc);
                }
            }
        }
        //将3张按顺序加入
        while (!comb.get("3").isEmpty()){
            for (int i = 0; i < 3; i++) {
                sortList.add(comb.get("3").remove(0));
            }
        }
        //将2张按顺序加入
        while (!comb.get("2").isEmpty()){
            Integer remove = comb.get("2").remove(0);
            for (int i = 0; i < 2; i++) {
                sortList.add(remove);
            }
        }
        //将1张按顺序加入
        while (!comb.get("1").isEmpty()){
            Integer remove = comb.get("1").remove(0);
            for (int i = 0; i < 1; i++) {
                sortList.add(remove);
            }
        }

        String collect = sortList.stream().map(String::valueOf).collect(Collectors.joining(" "));
        System.out.println(collect);
    }

}
